package luogu;

import java.util.Scanner;

public class A1135 {
static int n;
static int begin;
static int end;
static int[] vis;
//邻接表构造
static int[] h;
static int[] ne;
static int[] e;
static int idx=1;
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        begin=sc.nextInt();
        end=sc.nextInt();
        vis=new int[n+1];
        h=new int[n+1];
        ne=new int[2*n+5];
        e=new int[2*n+5];
//每个楼层相当于图中的一个点
        //由作用的上下相当于有向边
        //构造邻接表
        //求a到b的最短路
        for(int i=1;i<=n;i++){
            int u=sc.nextInt();//K i
            if(i+u<=n){
                add(i,i+u);
            }
            if(i-u>=1){
                add(i,i-u);
            }
        }
        //图构建完成，求a到b最短路
        int res= bfs(begin,end);
        System.out.println(res);
    }
    static int bfs(int a,int b){
        //将起始点加入队列，标记
        int[] q=new int[2*n];
        int hh=0,tt=-1;
        vis[a]=1;
        q[++tt]=a;
        while(hh<=tt){
            //当队列不为空
            //取出队头
            int cur=q[hh++];
            for(int edge=h[cur];edge!=0;edge=ne[edge])
            {
                int df=e[edge];
                if(vis[df]==0){//没走过
                    //标记为走过，加入队列
                    vis[df]=vis[cur]+1;
                    q[++tt]=df;
                }
                if(df==b){
                    //如果这个点，就是要找的点，返回
                    return vis[df]-1;
                }
            }
        }
        return -1;
    }
    static void add(int x,int y){
        e[idx]=y;
        ne[idx]=h[x];
        h[x]=idx++;
    }
}
